package sys.dao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import sys.bean.UsuarioBean;
import sys.utils.ConexaoADS;
import sys.utils.ConexaoMySql;
import sys.utils.Singleton;
import sys.utils.Utils;

public class UsuarioDao {

    //retornando dados do usuário
    public static UsuarioBean getDadosUsuario(String codigo) throws SQLException {
        Connection con = ConexaoMySql.getConection();

        String sql = "SELECT u.CODIGO_USUARIO, u.NOME, u.SITUACAO, u.FUNCAO, AES_DECRYPT(u.SENHA, \"vovojoao\") AS SENHA \n"
                + "FROM usuario u \n"
                + "where u.CODIGO_USUARIO = '" + codigo + "'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        UsuarioBean usuario = new UsuarioBean();

        while (rs.next()) {

            usuario.setCodigo(rs.getString("CODIGO_USUARIO"));
            usuario.setNome(rs.getString("NOME"));
            usuario.setSituacao(rs.getString("SITUACAO"));
            usuario.setTipo(rs.getString("FUNCAO"));
            usuario.setSenha(rs.getString("SENHA"));

        }
        stmt.close();
        con.close();

        return usuario;
    }

    //Incluir  usuario
    public static void incluir(UsuarioBean bean) throws SQLException {

        Connection con = ConexaoMySql.getConection();
        String sql = "INSERT INTO usuario (CODIGO_USUARIO, NOME, SITUACAO, FUNCAO) VALUES (?, ?, ?, ?)";
        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setString(1, bean.getCodigo());
        stmt.setString(2, bean.getNome());
        stmt.setString(3, bean.getSituacao());
        stmt.setString(4, bean.getTipo());

        stmt.execute();

        stmt.close();
        con.close();
    }

    //Alterando usuário
    public static void alterar(UsuarioBean usuario, String id) throws SQLException {

        Connection con = ConexaoMySql.getConection();

        String sql = "UPDATE usuario SET NOME = ?, SITUACAO = ?, FUNCAO = ?, SENHA = AES_ENCRYPT(?, \"vovojoao\") WHERE  CODIGO_USUARIO = ?";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setString(1, usuario.getNome());
        stmt.setString(2, usuario.getSituacao());
        stmt.setString(3, usuario.getTipo());
        stmt.setString(4, usuario.getSenha());
        stmt.setString(5, id);

        stmt.execute();

        stmt.close();
        con.close();

    }

    //Lista de usuários para alterar e mandar para mysql
    public static List<UsuarioBean> listaUsuarios(String nome) throws SQLException, IOException {
        List<UsuarioBean> lista = new ArrayList<>();
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C04CODIGO, C04NOME, C04FLAG, FUDESC, USUFUNCAO \n"
                + "FROM SPAC04 \n"
                + "INNER JOIN SPUSU ON (C04CODIGO = USUCODIGO)\n"
                + "INNER JOIN SPFUSU ON (USUFUNCAO = FUCODIGO) \n"
                + "WHERE C04NOME LIKE '%"+nome+"%'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            UsuarioBean user = new UsuarioBean();

            user.setCodigo(rs.getString("C04CODIGO"));
            user.setNome(rs.getString("C04NOME"));
            if (rs.getString("C04FLAG").equals("A")) {
                user.setSituacao("ATIVO");
            } else {
                user.setSituacao("INATIVO");
            }
            user.setTipo(rs.getString("FUDESC"));
            user.setFuncao(rs.getString("USUFUNCAO"));

            lista.add(user);
        }
        stmt.close();
        con.close();

        return lista;
    }

    //Lista de vendedores para combobox
    public static List<UsuarioBean> getListaComboVendedores() throws SQLException, IOException {
        List<UsuarioBean> listaUsuarios = new ArrayList<>();
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C04CODIGO, C04NOME, C04TIPO, C04FLAG\n"
                + "FROM SPAC04 \n"
                + "WHERE C04FLAG = 'A' \n"
                + "AND C04TIPO LIKE '%V%' \n"
                + "ORDER BY C04NOME";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            UsuarioBean sp = new UsuarioBean();

            sp.setCodigo(rs.getString("C04CODIGO"));
            sp.setNome(rs.getString("C04NOME"));

            listaUsuarios.add(sp);
        }
        stmt.close();
        con.close();

        return listaUsuarios;
    }

    public static boolean efetuarLogin(String user, String senha) throws SQLException, IOException {

        boolean valida = false;
        Connection con;
        String sql;
        PreparedStatement stmt;
        ResultSet rs = null;

        con = ConexaoMySql.getConection();
        //fazendo login pelo nome de usuario
        sql = "SELECT u.CODIGO_USUARIO, u.NOME, u.FUNCAO \n"
                + "FROM usuario u \n"
                + "WHERE u.SITUACAO = 'ATIVO' \n"
                + "AND u.NOME = '" + user + "' \n"
                + "AND AES_DECRYPT(u.SENHA, \"vovojoao\") = '" + senha + "'";

        stmt = con.prepareStatement(sql);
        rs = stmt.executeQuery();

        if (rs.next()) {
            valida = true;
            Singleton.setNome(rs.getString("NOME"));
            Singleton.setCodigo(rs.getString("CODIGO_USUARIO"));
            Singleton.setTipo(rs.getString("FUNCAO"));

        } else {
            //fazendo login pelo codigo de usuario
            sql = "select u.CODIGO_USUARIO, u.NOME, u.FUNCAO\n"
                    + "from usuario u\n"
                    + "where u.SITUACAO = 'ATIVO'\n"
                    + "and u.CODIGO_USUARIO = '" + Utils.codCorreto(user, 3) + "'\n"
                    + "and AES_DECRYPT(u.SENHA, \"vovojoao\") = '" + senha + "'";

            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();

            if (rs.next()) {
                valida = true;
                Singleton.setNome(rs.getString("NOME"));
                Singleton.setCodigo(rs.getString("CODIGO_USUARIO"));
                Singleton.setTipo(rs.getString("FUNCAO"));
            }
        }

        stmt.close();
        con.close();

        return valida;
    }
}
